昨天的最後提到了Java其實可以讓子類別繼承多個「介面」父類別的成員。
如果反過來,讓一個父類別被多個子類別繼承呢 ?
這個就稱為「多型」(Polymorphism)。
多型顧名思義就是很多類型,指為不同資料類別提供統一的介面。
透過繼承過來的函數屬性,多型使用此去完成不同的功能。
(多型示意圖)
class Grade {
void grade_show() {
System.out.println("Here comes Student's grades : ");
}
}
class S1 extends Grade {
void grade_show() {
System.out.println("Student 1 got : 98 ");
}
}
class S2 extends Grade {
void grade_show() {
System.out.println("Student 2 got : 87 ");
}
}
public class Main {
public static void main(String[] args) {
Grade main_obj = new Grade();
Grade S1_obj = new S1(); //將S1當Grade來看
S2 S2_obj = new S2(); //S2用自己物件名稱和自己的建構子初始化內容
main_obj.grade_show();
S1_obj.grade_show();
S2_obj.grade_show();
}
}
S1,S2繼承Grade類別成員,在主函數中宣告物件時,因為兩個子類別都繼承了父類別的屬性,我們這邊將兩者物件都當Grade來看,並用各自之建構子去初始化內容。
介紹到這邊,為甚麼要用多型讓多個子類別去繼承呢 ? 這樣的寫法 :
讓物件與類別邏輯上獨立,增加了程式可維護性(maintainability)與可重覆使用性(reusability)
接著提到抽象類別的多型,因為本身不能建立物件,繼承上稍微有點不同
abstract class Animal{
public abstract String identify();
}
class mammals extend Animal {
public abstract String identify(){
return 'Its mammals';
}
}
class Amphibians extend Animal {
public abstract String identify(){
return 'Its Amphibians';
}
}
public class Main{
public String identification(Animal animal){
if(animal.identify() == 'Its mammals'){
return 'Mammals';
}else if(animal.identify() == 'Its Amphibians'){
return 'Amphibians';
}else{
return 'Nothing';
}
}
public static void main(String[] args){
Amphibians Frogs = new Amphibians();
System.out.println(identification(Frogs)); //Outputs : Amphibians
}
}
程式解析 :
這支程式是設計來辨識動物是哺乳、兩棲還是都不是。
此部分還可以注意的是主程式的部分
identification()
是用來分辨動物種類
抽象或介面多型,可以將不同的概念繼承在同一個通用的類別上
(分辨動物種類之函式碼參考什麼是oo-物件導向與多型去做改寫)
以上內容若有誤或任何問題,煩請不吝嗇告知,謝謝您!!!